package com.gqh.weather.auth;

import cn.dev33.satoken.stp.StpUtil;

/**
 * 用户上下文工具类
 * 使用Sa-Token Session保存和获取用户信息
 */
public class UserContext {

    /**
     * 获取当前用户信息
     *
     * @return 用户信息
     */
    public static UserInfo getUserInfo() {
        if (!StpUtil.isLogin()) {
            return null;
        }
        return (UserInfo) StpUtil.getSession().get("userInfo");
    }

    /**
     * 获取当前用户信息（别名方法）
     *
     * @return 用户信息
     */
    public static UserInfo getCurrentUser() {
        return getUserInfo();
    }

    /**
     * 获取当前用户ID
     *
     * @return 用户ID
     */
    public static Integer getCurrentUserId() {
        if (!StpUtil.isLogin()) {
            return null;
        }
        return StpUtil.getLoginIdAsInt();
    }

    /**
     * 获取当前用户账号
     *
     * @return 账号
     */
    public static String getCurrentAccount() {
        UserInfo userInfo = getUserInfo();
        return userInfo != null ? userInfo.getAccount() : null;
    }

    /**
     * 获取当前用户角色
     *
     * @return 角色
     */
    public static Integer getCurrentRole() {
        UserInfo userInfo = getUserInfo();
        return userInfo != null ? userInfo.getRole() : null;
    }

    /**
     * 获取当前用户城市码
     *
     * @return 城市码
     */
    public static String getCurrentCitycode() {
        UserInfo userInfo = getUserInfo();
        return userInfo != null ? userInfo.getCitycode() : null;
    }

    /**
     * 检查当前用户是否为超级管理员
     *
     * @return 是否为超级管理员
     */
    public static boolean isSuperAdmin() {
        UserInfo userInfo = getUserInfo();
        return userInfo != null && userInfo.isSuperAdmin();
    }

    /**
     * 检查当前用户是否有管理权限
     *
     * @return 是否有管理权限
     */
    public static boolean hasManagePermission() {
        UserInfo userInfo = getUserInfo();
        return userInfo != null && userInfo.hasManagePermission();
    }

    /**
     * 检查当前用户是否有指定城市码的权限
     *
     * @param targetCitycode 目标城市码
     * @return 是否有权限
     */
    public static boolean hasCitycodePermission(String targetCitycode) {
        UserInfo userInfo = getUserInfo();
        return userInfo != null && userInfo.hasCitycodePermission(targetCitycode);
    }

    /**
     * 清除当前用户信息（退出登录）
     */
    public static void clear() {
        if (StpUtil.isLogin()) {
            StpUtil.logout();
        }
    }
}